









#返回一个地址字符串，输入:国家(str)、省份(str)、街道(str)、门牌号(str)

def memory_address(country_str,province_str,street_str,house_str):
    address_str=country_str+province_str+street_str+house_str
    return address_str

#创建一个新账号用户，返回一个账户信息(账号(8位数字,str)，姓名，密码(6位int型)，地址，存款余额（int）,开户行)，

def create_account(name_str,code_int,address_str):
    # 账号名称在函数内部随机生成8位数字
    account_number=str(random.randint(10000000, 99999999))
    #将存款初始化为0
    savings=0
    #开户行为中国工商银行
    bank_name="ICBC"
    # 将每个用户信息存储到一个列表中并返回
    account_info=[account_number,name_str,code_int,address_str,savings,bank_name]

    return account_info

#一、实现添加用户功能
def add_account(account_info):
    global account_lib#声明account_lib为全局变量
    if account_info[0] in account_lib.keys():
        return 2 #用户已存在，返回代号2
    else:
        #用户不存在，需要判断用户库是否已满，满了就返回代号3
        if len(account_lib.keys())<100:
            #没满，就添加用户信息到字典中，返回代号1
            account_lib[account_info[0]]=account_info[1:]
            return 1
        else:
            #用户已满
            return 3

#二、实现存钱功能,输入：账号，密码，存取金额，返回值：bool型
def save_money(id_input,passwd_input,saving_num):
    global account_lib#使用全局变量，用户字典库


    if id_input not in account_lib.keys():#用户库没有此用户
        print("没有此账号的信息！")
        return False
    else:

        for accountID,accountID_info  in account_lib.items():
            if accountID==id_input:#找到了此账号，还需要验证密码
                if passwd_input!=accountID_info[1]:
                    print("密码错误！")
                    return False
                else:

                    accountID_info[3]+=saving_num#将用户的金额存进去
                    return True
#三、取钱功能
def draw_money(id_input,passwd_input,drawing_num):
    global account_lib  # 使用全局变量，用户字典库
    if id_input not in account_lib.keys():#用户库没有此用户

        return 1
    else:
        for accountID,accountID_info  in account_lib.items():
            if accountID==id_input:#找到了此账号，还需要验证密码
                if passwd_input!=accountID_info[1]:

                    return 2
                else:
                    if accountID_info[3]<drawing_num:
                        print(f"您所剩金额为{accountID_info[3]}元，所取金额不能大于{accountID_info[3]}元!")
                        return 3
                    else:
                        accountID_info[3]-=drawing_num#将用户的金额取出
                        return 0
#四、转账功能deal:交易额
def transfer_money(from_account,to_account,from_passwd,deal):
    global account_lib
    if from_account and to_account not in account_lib.keys():
        print("转出账号或转入账号不存在！转账失败！")
        return 1
    else:
        for accountID,accountID_info  in account_lib.items():
            if accountID==from_account:#找到了此账号，还需要验证密码
                if from_passwd!=accountID_info[1]:
                    print("密码错误！")
                    return 2
                else:
                    if accountID_info[3]<deal:
                        print(f"您所剩金额为{accountID_info[3]}元，转账的金额不能大于{accountID_info[3]}元!")
                        return 3
                    else:
                        #遍历找到转出账号
                        for to_accountID,to_accountIDinfo  in account_lib.items():
                            if to_accountID==to_account:
                                to_accountIDinfo[3]+=deal

                        accountID_info[3]-=deal
                        print(f"转账成功！转入方账户余额为{accountID_info[3]}")
                        return 0

#五、查询账户功能 传入值：账号，账号密码，返回值：空
def select_account():
    global account_lib
    id_input=input("请输入要查询的账号：")
    if id_input not in account_lib.keys():  # 用户库没有此用户
        print("没有此账号的信息，查询失败！")
        return
    else:
        passwd_input = int(input("请输入您的密码"))
        for accountID, accountID_info in account_lib.items():
            if accountID == id_input:  # 找到了此账号，还需要验证密码
                if passwd_input != accountID_info[1]:
                    print("密码错误！查询失败")
                    return
                else:
                    #输出此账户信息
                    print("******您要查询的账号信息如下***************************************************************************************")
                    print("{0:<20}{1:<20}{2:<20}{3:<20}{4:<20}{5:<20}".format("账号","姓名","密码","住址","存款","开户行"))
                    print("{0:<20}{1:<20}{2:<20}{3:<20}{4:<20}{5:<20}".format(
                          accountID,accountID_info[0],accountID_info[1],accountID_info[2],accountID_info[3],accountID_info[4]))
                    print("***********end*************************************************************************************************")
                    print("查询成功！")
                    return

if __name__=="__main__":
    import random
    print("******************************")
    print("*   中国工商银行             ****")
    print("*   账户管理系统                *")
    print("*      V1.0                   *")
    print("*******************************")

    print("*1.开户                        *")
    print("*2.存钱                        *")
    print("*3.取钱                        *")
    print("*4.转账                        *")
    print("*5.查询                        *")
    print("*6.Bye!                       *")
    print("*******************************")

    #初始化一个存储用户信息的字典，最大存储100个用户
    #定义此字典为全局变量
    account_lib=dict()

    #外层循环，只要不退出，一直提示用户输入对应数字办理业务
    while True:

        business_num=int(input("请输入您想要办理的业务(只能为整数)"))
        while business_num not in {1,2,3,4,5,6}:
            print("输入必须为1,2,3,4,5,6中的一个数字！")
            business_num = int(input("请输入您想要办理的业务(只能为整数)"))



        print(f"您办理的业务代号为{business_num}")
        if business_num==6:
            print("您选择了退出业务，现在为你退出系统。")
            break

        elif business_num==1:
            print("现在为你办理开户业务：")
            #创建一个新账号,用户需要输入姓名，密码，地址
            name=input("请输入你的姓名:")
            country,province,street,house=input("请输入国家,省份，街道，门牌号(用空格分隔)：").split()
            address=memory_address(country,province,street,house)
            code=int(input("请输入六位数字密码："))
            account=create_account(name, code, address)
            result=add_account(account)
            if result==2:
                print("该用户已存在！添加失败！")
            elif result==3:
                print("用户库已满，账号注册失败！")
            elif result==1:
                print(f"你的账号创建成功!账号信息：{account}")
                print("开户成功！")

        elif business_num==2:
            print("现在为你办理存钱业务：")
            id_input = input("请输入您的账号：")
            passwd_input = int(input("请输入您的密码"))
            saving_money = int(input("请输入要存入的金额："))
            result=save_money(id_input,passwd_input,saving_money)
            if result!=1:
                print("存钱业务办理失败！")
            else:
                print("存钱业务办理成功！")
        elif business_num==3:
            print("现在为你办理取钱业务：")
            ID=input("请输入您的账号：")
            passwd,drawing_money=map(int,input("请输入您的密码和取款金额,用空格隔开：").split())

            result=draw_money(ID,passwd,drawing_money)
            if result==1:
                print("没有此账号的信息！")
            elif result==2:
                print("密码错误！")
            elif result==3:
                print("钱不够!")
            elif result==0:
                print("取钱业务办理成功！")
        elif business_num==4:
            print("现在为你办理转账业务：")
            from_client,to_client=input("请输入您的账户信息和转入账户信息，用空格隔开：").split()
            passwd=int(input("请输入你的账号密码："))
            transfer_deal=int(input("请输入转账金额："))
            result=transfer_money(from_client,to_client,passwd,transfer_deal)
            if result==0:
                print("转账业务办理成功！")
            else:
                print("转账业务办理失败！")
        elif business_num==5:
            print("现在为你办理查询业务：")
            select_account()

        # 打印一下用户库信息
        print("***用户库信息****")
        for account_item in account_lib.items():
            print(account_item)
        print("***end*********")


